#ifndef HTEXTURE_H
#define HTEXTURE_H

/*
 *  @autheur : LEMOUEL Florian
 *  @date : 11.04.2013
 *  @version 1.0 : création de la classe complète
 *  @version 1.1 : ajout de la sérialisation
 */

#include "habillage.h"
#include "texture.h"
#include "gestionnairetextures.h"
#include "QtOpenGL"
#include <string>

#include "boost/serialization/serialization.hpp"
#include <boost/serialization/export.hpp>

/*
 * Classe représentant un habillage de type texture.
 * On ne prend pas en compte la couleur courante.
 */

class HTexture :public Habillage
{
 //--------------------- Constructeurs et destructeur -------------------
public:
    //Constructeur par défault
    HTexture();

    //Constructeur avec le nom de la texture
    HTexture(QString nomTexture);

    //Destructeur
    ~HTexture();
    //----------------------------------------------------------------------
    //--------------------- Méthodes ---------------------------------------

    //Fonction utilisant l'habillage de la classe mère
    void utiliser();
    //----------------------------------------------------------------------
    //--------------------- Accesseurs -------------------------------------

    //----------------------------------------------------------------------
    //--------------------- Surcharge des opérateurs -----------------------

    //----------------------------------------------------------------------
    //--------------------- Attributs --------------------------------------
private:
    //Nom de la texture de l'habillage
    QString _nomTexture;

    //Pointeur sur la texture
    Texture* _texture;
    //----------------------------------------------------------------------
    //--------------------- Sérialisation ----------------------------------
public:
    template<class Archive>
    void save(Archive & ar, const unsigned int version) const
    {
        std::string s = _nomTexture.toStdString();
        ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(Habillage);
        ar << s;
    }

    template<class Archive>
    void load(Archive & ar, const unsigned int version)
    {
        std::string s;
        ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(Habillage);
        ar >> s;
        _nomTexture = _nomTexture.fromStdString(s);
        _texture = &GestionnaireTextures::getInstance().getTexture(_nomTexture);
    }

    template<class Archive>
    void serialize(Archive & ar, const unsigned int file_version)
    {
        boost::serialization::split_member(ar, *this, file_version);
    }
    //----------------------------------------------------------------------
};

BOOST_CLASS_EXPORT(HTexture);



#endif // HTEXTURE_H
